23

» WarCraft 3 / Баги Model Editor

Похожие вопросы:

ответ
Он лежит на случай если игре необходим данный реф. В РО ты мог иногда видеть необходимое приложение и варианты small, medium и large. Также по возможности спецэффекты и эффекты способностей могут к ней крепиться.
А collission насколько я помню отвечает за выделение или за столкновение летающих юнитов. На всякий случай оставляй, а то мало ли, да и места много не просит.

23

» WarCraft 3 / Не запускается карта.

Похожие вопросы:

ответ
все карты с кодом,без кода карта не запустится просто
похоже повреждена/повторяется функция конфиг
проверь близард джи на наличие в нём такой функции и проверь папку с игрой,так же проверь их на наличие функций маин и прочих функций которые создаются WE
если не поможет то переустанови варик
ответ
Варианта два - допротектили карту либо у тебя преаддоненый варик. Чаще встречается первое.
ответ
Чувак, ты JASS API хоть 1 сек смотрел?
Что за trig?, что за c?
	local trigger trig = CreateTrigger()
У тебя переменные не объявлены, а ты пытаешься к ним обратится, ясно что выдаст ошибку.
ответ
~8gabriel8:
quq_CCCP, извлёк. Теперь мне засунуть этот код в копию этой карты, которую в редакторе кампаний добавить в кампанию и сохранить? Вроде как получается то же самое, как при сохранении карты в JNGP отдельно, а потом её добавлении в кампанию.
P. S. Цвета персонажей слетели при этом способе, а они очень важны. Хотя так код и правда работает.
P. P. S. Сначала карта запускалась, но цвета юнитов менялись, код срабатывал. Потом решил повторить это(замену файла war3map.j), внеся изменения в простые триггеры, но карта уже не запускалась.
P. P. P. S. Короче, разобрался в причине того, что карта не запускалась, я её с рабочего стола загружал и сохранял. Видимо из-за русских символов в пути не получалось. Если карта лежит в папке maps, то нормально. Но проблема с другими цветами персонажей, а точнее красным цветом, так и осталась. В итоге решил не мучиться, а сделать всё обычными триггерами.
Кстати, из триггера убрали элементы vjass, код стал таким, но всё равно не сохранялся в кампании:
globals
timer alp_t = CreateTimer()
integer alp_m = 0
unit array alp_a
boolean array alp_f
integer array alp_alpha
real array alp_speed
real array alp_time
endglobals
function TimeUnitAlpha takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
exitwhen i>alp_m
if GetWidgetLife(alp_a[i])>0.405 and alp_time[i]>0 then
if alp_f[i] then
set alp_alpha[i] = alp_alpha[i] + R2I(alp_speed[i])
else
set alp_alpha[i] = alp_alpha[i] - R2I(alp_speed[i])
endif
call SetUnitVertexColor(alp_a[i],255,255,255,alp_alpha[i])
set alp_time[i] = alp_time[i] - 0.05
else
if alp_f[i] then
call SetUnitVertexColor(alp_a[i],255,255,255,255)
endif
set alp_a[i] = alp_a[alp_m]
set alp_f[i] = alp_f[alp_m]
set alp_time[i] = alp_time[alp_m]
set alp_alpha[i] = alp_alpha[alp_m]
set alp_speed[i] = alp_speed[alp_m]
set alp_m = alp_m - 1
if alp_m==0 then
call PauseTimer(alp_t)
endif
endif
endloop
endfunction
Принимает : (Юнита, Длительность , начальная прозрачность , макс. прозрачности за время , Появится/Исчезнуть )
call AddUnitAlpha(Caster,3,0,255,true) = Появится за 3 секунды
call AddUnitAlpha(Caster,3,255,255,false) = Исчезнет за 3 секунды
function AddUnitAlpha takes unit A,real TIMES,integer ALPHA,integer MAX_ALPHA,boolean F returns nothing
set alp_m = alp_m + 1
set alp_a[alp_m] = A
set alp_f[alp_m] = F
set alp_time[alp_m] = TIMES+0.10
set alp_alpha[alp_m] = ALPHA
set alp_speed[alp_m] = MAX_ALPHA/TIMES*0.05
if alp_m==1 then
call TimerStart(alp_t,0.05,true,function TimeUnitAlpha)
endif
endfunction
ответ
в тех картах скорее всего используется ретурн баг
который в варкрафте с 1.24 версии не работает

23

» WarCraft 3 / Здоровье персонажа.

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
Ну собственно это такая способность 'Aspb' - книга заклинаний, способность одноименного предмета...
Собственно способность 'Aspb' -spellbook имеет поле 'Ability List' как у юнитов, в котором можно указывать другие способности.
Что нам нужно:
  1. Скопировать способность 'Aspb' - книга заклианий и изменить название на желаемое, удалить иконку и обнулить все параметры ( мин и макс заклинаний ставим на 1, список способностей - тут очищаем весь список и добавлем туда интересующую вас способность, в вашем случае баш...)
  2. Нужно запретить эту способность для изучения игроком триггерно, с помощью SetPlayerAbilityAvalible (в гуях не помню как, там в разделе игрок есть эта функция)
  3. Собствнно добавлем\удаляем нашу способность на основе "спеллбука" когда захотим, она не будет отображаться и занимать место на карте команд.
Примечание:
Запрещенные способности загружаются в память в полном обьеме, не смотря на то что их не видит игрок, поэтому удаляйте все описания, эффекты, иконки, параметры которые отвечают за визуализацию, так вы увеличите скорость загрузки вашей карты, хоть и не намного.
ответ
закрыт по таймауту
ответ
  1. прячем героя, вешаем дамми или эффект на цель
делаем проверку на нейтрала, если да - даем контроль и скилл для выхода
  1. при событии входа в регион делаем проверку на наличие предмета
если есть - делаем нужное действие

все необходимые действия и проверки есть в триггерах
если попытки действительно имели место - в студию

23

» WarCraft 3 / Свечение

Похожие вопросы:

ответ
Загрузилось наконец. Посмотрел. Это "крепление ориджин" косячит.
Исправил.
Хозяин Миров, годится?
В положительном случае выбери ответ на вопрос.
ответ
Открываешь героя в Mdlvis, выделяешь свечение, копируешь его, затем не закрывая модель, открываешь в этом же окне модель здания, будет вопрос хотите открыть новую модель? Ответ да. В открывшейся модели выбираешь точку любой поверхности с тимколором, и нажимаешь специальная вставка, вуаля, готово.
ответ
ssbbssc:
пересоздать архив кампании\импортировать в каждую карту отдельно
Попробую, а под пересоздать что имеется ввиду?
Помогло вот что, триггерное добавление абилки "свечения"
Я ставил сначало импорт атача в каждую карту кампании, по отдельности в сражении все работало
но, при переходе по кампаниям именно эта способность "свечения "отказывалась крепиться герою, а все остальные скиллы без проблем работают
Меня это достало и я просто давал скилл при вывозе юнита с кэша в переходе между картами, и все работает, тьфу тьфу)
ответ
это не совсем то, но тоже решение проблемы
ответ
~8gabriel8:
Короче, обнаружил просто ошибку в пути файла, вот нормальная версия:
Если кому-то ещё понадобится это, то там ошибка в пути текстуры розовой модели. Вместо Glow стоит Gloe.

23

» WarCraft 3 / Текстуры склона

Похожие вопросы:

ответ
Сначала, Хоффман, думал обозвать тебя лентяем, но потом не удивился, почему ты ничего не нашел !!!
Близзарди засунули ети текстуры очень глубоко:
в архиве War3x.mpq есть архивы с названиями в виде букв английского алфавита, так вот твои заветние текстуры ето Cliff0.blp и Cliff1.blp в архиве Z.mpq.
Итого: War3x.mpq / Z.mpq / ReplaceableTextures / Cliff / Cliff0.blp
War3x.mpq / Z.mpq / ReplaceableTextures / Cliff / Cliff1.blp
ответ
Как вариант - попытаться в одной текстуре клиффов попробовать разместить сразу два визуальных решения.
Текстуры клиффов находятся в mpq архиве по адресу ReplaceableTextures\Cliff\
Текстура клиффов
A. рандумные поверхности клиффов
B. тайлинг прямых граней, верхушка клиффа
C. тайлинг прямых граней, низ клиффа
D. угловые тайлы, выбирается 1 рандумный
E. угловые тайлы, низ клиффа
F. применяютя у мостов и подъёмников
Каждому клиффсету принадлежит два файла:
Угловатые клифы ReplaceableTextures\Cliff\Cliff0.blp
Прямые клифы ReplaceableTextures\Cliff\Cliff1.blp
Вроде всё правильно написал, если не прав поправьте.
ответ
Решение: перерисовать клиф, обновить в формат blp. залить в карту.
ответ
У склона вроде как только 2 текстуры можно использовать в карте.
Может, через JNGP можно как-то это ограничение обойти? Или Zepir map editor?
Только 2 текстуры, в JNGP встроенный UMSWE позволяет увеличить это количество, но в игре верным образом это будет видно только при запуске игры через специальный исполняемый файл, так что, считай, что нет.
Через Zepir это, ЕМНИП, возможно провернуть без вышеуказанного костыля, но придётся обработать все нужные склоны (что само по себе является весьма трудоёмким и скрупулёзным процессом), при этом при первом же пересохранении карты в обычном редакторе весь достигнутый результат будет потерян. Использование некоторых приложений для оптимизации карты также приведёт к умножению результата труда на ноль.

Если вкратце, то игра не стоит свеч, а результат - труда.

ничего себе, кто-то помнит о зепире D:

У бота, кстати, есть несколько хороших вариантов, например, использовать декорации в виде склонов.
ответ
В файле war3x.mpq есть несколько маленьких mpq для каждого тайлсета. Конкретно текстуры Короны лежат в i.mpq

23

» WarCraft 3 / Проблема с магазином.

Похожие вопросы:

ответ
в чем редактор вкв3 отличается от редактора ск2 - к сожалению, в вк3-шном эдиторе не удастся отловить все данные.
если ты скажешь, что конкретно делает твой спелл, тебе могут подсказать более легкий вариант исполнения
насчет спецэффектов - утечка решается просто
  1. создаешь точку, если спец на земле. если спец на юните, точка не требуется.
  2. собсно воспроизводишь спец
  3. и сразу его удаляешь. спец удалится тогда, когда доиграет до конца его анимация
  4. кастом скриптом удаляешь точку, если 1 часть 1 пункта актуальна
ответ
Steal nerves:
мб нужно сменить ид приказ у абилки
ответ
ApoloZ2, вот пример проверки в какой именно магазин продали предмет. В условиях ставишь необходимые типы предметов которые можно продать. Вместо "Продано!" вставляешь уже свои действия.
ответ
Все предметы изночально принадлежать враждебным, юзайте Custom value предмета, если 0 то предмет еще никто не подобрал, значит его получили убив монстра или купили, значит ставим ему custom value с номером игрока (нумеруйте не с 0, а с 1). Легко и просто, правда?

23

» WarCraft 3 / Команда Wait

Похожие вопросы:

ответ
Сама функция TriggerSleepAction (Wait) не вызывает утечек, но багнута и при использовании в качестве задержек может способствовать утечкам, поэтому никаких вейтов в спеллах и всяких респаунах - только таймеры, вейты нужны для синхронизации данных и роликов и точка!

23

» WarCraft 3 / Несколько целей атаки

Похожие вопросы:

ответ
это способность ракеты у альянса способности войска
там вроде даже можно отследить какие именно цели получили урон,при событии юнит получает урон.
ответ
Пункт " убить боевую единицу" отвечает за то сможет ли урон от яда убить Юнита, если флаг не установлен то у Юнита останется 1-2 хп. Но яд не может его убить.
Разумеется не работают яд. Стрелы на маг иммунитет, ибо это активный автокаст.
Чтобы автокаст стрелы работали на маг. Имун нужно чтобы способность относилась к герою, требуемый для изучения уровень был выше 1. Вот и все.
ответ
Filius Dei:
да есть такая способность пассивка, у альянса называется ракеты, из юнитов её использует самоходная мортира, изменяя модели атаки коль-во целей и дальность можешь заставить юнита или здание стрелять сразу по многим врагам, но 1 снаряд 1 враг не будет такого что бы 5 стрел и все в одного, зато допустим пришло 6 врагов а атакует сразу 3-ех можно,(можно и хоть 100 врагов атаковать, ну 100 предел) только учти стрелы разлетаются во все стороны на 360, удобно хотя иногда выглядит странно когда один лучник шмалит всех вокруг))
ответ
  1. вампиризмы работают лишь на основную атаку, не затрагивая модификаторы.
  2. не думаю, москиты не дружат с всякими проверками - подошел ли юнит к юниту или нет, просто давай неуяз, да и вовсе нафига тогда рабочие с ратушой? Так золото слабо дать или заставить даммиков проигрывать анимацию таскания мешков работникам.
  3. Еще раз, все модификаторы уроны, промахи, хреномахи рассчитываются в момент замаха, до успешного завершения атаки. Потом уже неважно, можно удалить юнита и снаряд достигнет цели (ну если ничего не помешает вроде промаха) и нанесет урон.

23

» WarCraft 3 / AddSpecialEffectTarget

Похожие вопросы:

ответ
Проблема решена, причина была в моей криворукости.
ответ
function IsAbilityOnCooldown takes integer a returns boolean
	return IsFlagBitSet(RMem(a+0x20),512)
endfunction

function StartAbilityCooldownFxByAddress takes integer pAbility, real cd returns boolean
	if pAbility < 1 then
		return false
	endif
	set Memory[pReserverdIntArg1 / 4] = mR2I(cd)
	call CallThisCallWith2Args( RMem(RMem(pAbility)+0x3A4) , pAbility, pReserverdIntArg1 )//pStartAbilityCD
	return IsAbilityOnCooldown( pAbility )
endfunction

function StartAbilityCooldownFx takes unit whichUnit, integer abilityId, real cd returns boolean
	local integer pAbility = 0
	if GetUnitAbilityLevel( whichUnit, abilityId  ) == 0 or cd == 0.00  then
		return false
	endif
	return StartAbilityCooldownFxByAddress(GetUnitAbility(whichUnit, abilityId),cd)
endfunction
ответ
Все.
Проблема была НЕ в коде.
Код абилы вообще выключен, но после игры с ней фаталит. Просто за активацию дефолтной абилы.
Проблема в РО. ФАТАЛ ПОСЛЕ ИГРЫ ВЫЗЫВАЕТ НАСТРОЙКА АБИЛЫ В РО.
Для меня это звучит как "девочка с бородой" - в принципе возможно, но довольно удивительно, поэтому сразу в голову и не пришло.
Че-то нашаманено, ща перераспакую архив с "чистыми" картами и буду разбираться, что. Но т. к. эта абила пастилась на основе другой, сделанной на основе replenishlife, а там фатала не наблюдалось - разберусь.
///////////////////
Ну или другой вариант еще остался - РО в принципе настолько раздут до опупения, что любая дефолтная абила, созданная после момента X, начинает фаталить, если часто юзать ее в игре.
Но это крайне сомнительно, ибо:
  1. Довольно бредово;
  2. Первая из двух фаталящих абил на основе replenishlife была создана ДО трех последующих за ней абил у своего героя.
ответ
Steal nerves:
PT153:
Вспомнил про один баг. Есть сделать PauseTimer() на периодический таймер, а потом на этой таймер использовать ResumeTimer(), то таймер повторит свой цикл лишь раз, а потом остановится.
сам не пользуюсь ResumeTimer, но щас проверил, действительно не работает что-то. Видимо, это работает только тогда, когда таймер не до конца дошел.
можно обойтись и без ResumeTimer
понимаю, ты хочешь сделать какое-то ограничение после возвращения урона. Спустя 3 секунды возвратка может снова возвращать урон.
Можно было сделать по-другому.
Еще не понимаю, зачем нам нужен периодический таймер.
  1. можем логическую переменную b завести и таймер t
  2. нанес противник урон = проверяем логическую переменную, если истина, запускаем одноразовый таймер, и ставим ложь в логической переменной = false
if b then 
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.?mdl",u,"origin"))
call UnitDamageTarget(udg_u,u,r*5,false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
call BJDebugMsg("Reflected:"+R2S(r*5))
call TimerStart(udg_t,0.5,false,function t3a)
set b = false
endif
  1. когда таймер запустится
function t3a takes nothing returns nothing
    call PauseTimer(udg_t)
    set b = true
endfunction
думаю все что надо это call ResumeTimer() заменить на call TimerStart()

23

» WarCraft 3 / Способность

Похожие вопросы:

ответ
Когда юнит проучивает пассивку, добавляй в группу юнита, который выучил пассивку. Дальше все просто -
Юнит умирает
Киллинг юнит в нашей группе - да
Дайинг юнит не в команде владельца киллинг юнит.
Игрок - адд проперти - 500 золото (овнер оф киллинг юнит)
ответ
скорее всего, он говорит о SetUnitMovespeed ()
ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь
ответ
На JASS-е есть функция GetLearnedSkill(), которая выдает rawcode выученного умения. Создаешь переменную типа "целочисленная" с названием SkillCode, потом в начале действий триггера пишешь через Custom Script что-то типо этого:
set udg_SkillCode=GetLearnedSkill()
и затем делаешь какие тебе там нужны сравнения на переменную SkillCode.
ответ
XGM Bot:
Похожие вопросы:

ответ
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.
ответ
ИИ чтоли не кастует? Сделай триггерный каст, Событие - юнит обнаружил цель в пределах досягаемости, проглотить не в кулдауне и цель неуязвимый враг, пойти и проглотить юнита...
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
ответ
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.


23

» WarCraft 3 / Wait в циклах

Похожие вопросы:

ответ
cs: set udg_e[DorLoopIntegerA - 1] = AddSpecialEffectLoc ( PolarProjectionBJ( GetUnitLoc(GetTriggerUnit(), 250, i ), "Abilities\\Spells\\Human\\FlameStrike\\FlameStrike1.mdl")
udg_e - глобальная переменная. Массив типа эффект.

А вообще, изучаем основы программирования. Глава II - массивы.
ответ
Нет. Я пока хочу достроить карту на GUI, думаю мне осталось дней 10-30 работать, а буду ли следующую делать - под вопросом. Не хочется тратить время на изучение jass из-за пустяка! Однако Я использовал Custom Script, но это было содрано с одного сайта, а вот чтобы делать самому нужно сначала полностью изучить язык. Либо знаю, либо нет, чуть-чуть не считается!
Что касается wait, то если не это то что тогда?
Опытным путём сам установил что в процесс ничего не вклинивается. Можно использовать Триггер как Функцию и ссылаться на него в другом Триггере. По сути, это и есть функция, если глянуть на jass. Вопрос закрыт.

23

» WarCraft 3 / как сделать щит?

Похожие вопросы:

ответ
А что мешает заставлять юнит юзать манащит, при изучении, воскрешении и деактивации?
ответ
Можно сделать на основе заклинания Жар Преисподней, но без триггеров тут не обойтись.
ответ
Тимур:
Через способность "панцирь с шипами".
Не панцирь с шипами, а доспехи горного великана (Каменные доспехи), но только если требуется заблокировать физический урон.
Для блокировки любого типа урона потребуется триггер срабатывающий на нанесение урона, и последующее лечение, чтобы изобразить блокировку урона.
ответ
на определение сзади ли юнит есть функция
function IsUnitBack takes unit uF, unit uWhichBack returns boolean
        real r1 = bj_RADTODEG * Atan2(GetUnitY(uWhichBack) - GetUnitY(uF), GetUnitX(uWhichBack) - GetUnitX(uF)) + 360.
        real r2 = GetUnitFacing(uWhichBack) + 360.
           if GetUnitY(uWhichBack) < GetUnitY(uF) then
               set r1 = r1 + 360.
           endif
        return (r1<=(r2+45.) and r1>=(r2-45.))
    endfunction
ответ
Берешь способность на базе авиабомб или еще какой-нибудь пустышки, потом устанавливаешь систему детекта урона, к ней прикручиваешь свой триггер, который проверяет наличие способности, отнимает ману, добавляет способность на +100500 хп, запускает таймер на 0.00 секунд с повешенной на него через хеш информацией о нанесенном уроне, и после срабатывания таймера возвращает отнятые хп и удаляет +100500 хп способность.

23

» WarCraft 3 / Сброс перезарядки предмета.

Похожие вопросы:

ответ
Gerhop, если у игрока лишь 1 герой то можно сразу дать этот скилл
при подборе предмета разрешать его а при выпадении запрещать
тогда вроде кд будет сохранятся
если мне память не изменяет

23

» WarCraft 3 / Переменная

Похожие вопросы:

ответ
Что такое "назначить пользовательский параметр юнита или предмета" и как им пользоваться?
Используется для сохранения каких-нибудь своих данных в этот конкретный предмет или юнита
Добрые люди, как присвоить глобальной переменной (целочисленной) цену определенного предмета (так чтобы если изменить цену в редакторе объектов, то в редакторе триггеров она сама изменялась) или какая главная характеристика определенного героя (разум, сила, ловкость).
Никак, только руками указывать или использовать это xgm.guru/p/fly-data
ответ
globals
	string  array  str
endglobals

set  str[ 0 ]  =  "H"
set  str[ 1 ]  =  "E"
set  str[ 2 ]  =  "L"
set  str[ 3 ]  =  "L"
set  str[ 4 ]  =  "O"

call BJDebugMsg( str[ 0 ] + str[ 1 ] + str[ 2 ] + str[ 3 ] + str[ 4 ] )
ответ
Пушистый, я пытаюсь локальной переменной присвоить значение глобальной переменной типа Способность и пишет: Cannot convert integer to ability
local ability s
set udg_BuferAbility=GetSpellAbilityId()
set s=udg_BuferAbility
ответ
Глянул... код (?)
Такого слепка из говна я давненько не видел
Ну, во-первых, у тебя нет инстанса abilitylist, то есть:
AbilityList abilitylist = abilitylist .create()
Во-вторых :
static thistype newAbility()
{
  thistype this = allocate()
  ..
  пишете свою ерунду
  ..
  return this
}
А в третьих почему у в абилитилисте вместо 1 массива из структур абилити со всеми вытекающими параметрами есть по массиву на каждый параметр?
Написал про код с целью вам сказать, что нужно работать над собой, почитать про списки в языках программирования, а потом уже лепить один вариант

23

» WarCraft 3 / Как вращать юнита вокруг точки?

Похожие вопросы:

ответ
Может, поставить нулевую скорость в редакторе объектов?
Или не нулевую, но триггерно каждые 0.03 с. задавать ему координаты, на которых он изначально поставлен.

23

» WarCraft 3 / Рав коды

Похожие вопросы:

ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь

23

» WarCraft 3 / Взаимосвязь.

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
BlackCascade:
Обьясните связь, почему построенный обьект не удаляется в след триггере
Потому, что в следующем триггере ты пытаешься обратиться к построенному объекту с помощью функции "Реакция на событие - Constructed Structure". Но эта функция не вернёт юнит, т.к. она возвращает юнит только когда событием была постройка здания. У тебя же событие "Боевая единица - Unit Enters Region" и в нём не происходит постройка здания. В нём происходит вход в регион и оно возвращает уже юнит, вошедший в регион, а никак не построенное здание.
разобраться бы во всем этом еще.
Когда юнит завершает строительство, игра сохраняет построенно здание в переменную UnitOfDeath[RectOfDeathLength], назначает новому триггеру новое событие, что в область вокруг построенного здания вошёл юнит. Эту область игра сохраняет в переменной RectOfDeath[RectOfDeathLength]. Когда событие срабатывает, цикл проверяет, в какой из этих областей находится вошедший юнит и удаляет здание, которое было связано с этой областью переменной UnitOfDeath[RectOfDeathLength].
ответ
решил проблему костылём - дал возможность рабочему строить только башню - шаблонку, которая в свою очередь может улучшаться в две указанные башни. Взаимосвязь поставить только от башни - шаблонки. Лимит поставил на башню шаблонки.
Но тема не закрыта. Хотелось бы узнать можно ли решить проблему без костылей.
ответ
Дело именно в количестве триггеров а не в их начинки и назначении, создавать триггеры динамически по мере надобности в гуях нельзя, так что переходите на jass.
ответ
Возможно, упустил то, что в игре прибиты гвоздями 4 расы и изменение визуальных файлов никак не меняет игровой код?

23

» WarCraft 3 / Пассивка

Похожие вопросы:

ответ
Опен дота в помощь, тупо добавление пассивки на скорость атаки при каждом ударе, потом если юнит бьет другую цель, то удаляем половину бонуса.
ответ
У пассивок кроме креста перерождения и эксгумации труповозки нет кулдауна, ну совсем нет! Так что берем перерождение и рисуем на нем кулдаун мемхаком, а чем эффект крита или блока изображаем триггерно ну или вручаем, удаляем эти пассивки в заблочннном спелбуке юниту.
ответ
Если абуза боишься, можно просто поставить, что пассивка не действует чаще, например, раза в 0.5 секунды (таймером вешаешь на юнита "что-то" - абилу-маркер, хэш-значение и т. д., после окончания таймера убираешь, а в условиях - если у юнита это "что-то" есть, то пассивка не канает)
ответ
еще раз - нет! дефольтные способности вы не отследите, только полностью триггерный аналог, баши и криты сделанные триггерно лежать вот тут
Простенько, на jass но для начала сойдет.
ответ
quq_CCCP:
KaneThaumaturge, эмм а как насчет не делать такие пассивки? Детект физического урона вещь довольно сложная, а еще и если нужно для множества юнитов весьма ресурсоёмкая, желательно все сделать по шустрее, без лишний или тяжелых действий.
Готовые системы этого дела есть, но они на jass и требуют еще и понимания как они работают, так что если у вас нет этого понимания и желания понимать это - то мб не надо?
А если делать через
Событие: Юнит х атакован
Условие: На ваш извращенный вкус
Действие -
Атакуемый юнит=z
добавить к триггеру у событие "юнит получает урон"
В чём фишка? Через такую схему можно задать в событии, что именно z получает урон.
Так же следует не забывать вставлять в условие кто у нас Damage source
Понимаю, что коряво, криво, кособоко, не без багов, но для одного героя вполне работает
KaneThaumaturge:
Extremator, Есть идея: Когда юнит атакует ставить L(логическая) - да. Потом отслеживать его приказы, и если он что-то приказал, то ставить его L=нет. С этим парарелельно запускать таймер, который равен времени его замаха. Ну и по окончанию таймера проверять логическую да или нет и уже делать действия.
Ага, а как модификаторы ускорения атаки отслеживать будешь? Или юнита под блудластом?

23

» WarCraft 3 / Отряд

Похожие вопросы:

ответ
  • Выбираешь всех целевых юнитов в группу.
  • Создаёшь дамми.
  • Используя ForGroup и GetEnumUnit, применить на каждого юнита в группе заклинание.
  • Очищаешь групппу.
  • Удаляешь группу.
  • Удаляешь дамми.

У дамми-юнита должны стоять настройки анимации, позволяющие применять способности без задержек, у способности не должно быть кулдауна.
ответ
~8gabriel8:
bOrissko, у тебя вроде как ссылалось всегда на Паладина, так как он Hero [1], будь-то владелец юнита, либо реплика от юнита. Точно уже запамятовал, так как шустро всё переделал. У меня нет желания тратить время на проверку триггера, когда указан Tiggering unit/Переключающий юнит, потому стараюсь всегда указывать точно к ситуации, в данном случае переделал так, что диалог срабатывает при приближении героя на расстояние не более 256 к капитану. Указал везде Entering unit/Не знаю как будет в русских триггерах, наверное, Вошедший или Входящий юнит. Вместо паузы для героя поставил приказ Стоп, хотя это, наверное, неправильно я сделал, так как он погонится во время диалога за приблизившимися врагами. Пожалуй, лучше верни герою паузу вместо Стоп, а также добавь неуязвимость до распаузы.
По поводу диалогов, мне рассказал автор кампании Эфирия, в создании которой участвую, что оптимальной длительностью диалогов является 5 секунд на строчку, если строка не полная, то прикидываешь, на сколько из 5 секунд она тянет. В самой первой фразе в диалоге лучше прибавлять секунду, так как мозг не сразу переключается с игры на диалог, и его начальная реплика зачастую кажется быстрой. Например, у тебя первая фраза "Привет!", это одна секунда, но так как она первая, то я поставил две. Следующая фраза тянет на 4 секунды, так и поставил.
Чтобы прикинуть расстояние до юнита, необходимо пользоваться сеткой:
Сетка в редакторе (кнопка G):
большой квадрат = 512х512
средний квадрат = 128х128
малый квадрат = 32х32
Считается расстояние от центра юнита, а не крайних точек модели. У тебя было 150, но мне показалось, что это мало, ведь подходить надо очень близко, потому поставил 256.
ответ
XGM Bot:
Похожие вопросы:

ответ
Частично не понял, тоесть нужно что бы в кинематике был несуществующий юнит?
Допустим в окне кинематики паладин с каким либо именем что то говорит, но на карте его нет. Если да то это Спецэффекты - Transmission From Unit-Type
ответ
А касательно остальной части, если UnitUserData нигде не используется, создаешь массив юнитов и отрядов. Массив юнитов забиваешь своими капитанами. В UnitUserData капитана пихаешь его порядковый номер в массиве. Создаешь группу юнитов для этого капитана.
  1. Добавление через каст способности.
Я бы делал через 2 разные абилки с одной и той же позицией в интерфейсе. Пока нужный тебе юнит не является частью отряда - у него таргетная абилка при касте которой на капитана он добавляется в группу соответствующего капитана и получает 2ю абилку взамен первой.
Касательно выделения этих пехотинцев - можно намутить что-то с передачей контроля или создать триггер, который будет снимать выделение с юнитов у которых есть 2я абилка. Если ты хочешь чтобы по одиночке можно было выделять пехотинцев - можешь создать переменную для каждого игрока с капитанами, куда будет просто записываться последний выбранный юнит. При снятии выделения - проверять не выбран ли этот же юнит, в случае чего не снимать выделение. Правда не уверен будет ли корректно работать :> В крайнем случае - будет работать в три клика вместо двух. Если я не ошибаюсь.
Касательно поведения этих пехотинцев - что-то реально стоящее сделать сложно. Возможно, но мне не с руки все расписывать :> Простейший вариант - приказывать пехотинцам после добавления в группу следовать за капитаном.
  1. Добавление через атаку капитана
Триггер, проверяющий что капитан получил урон или атакован, как угодно. Далее любым способом проверяешь есть ли в группе этого капитана юниты. Если нет - выбираешь всех пехотинцев N радиусе, добавляешь в отряд, заменяешь абилку/либо просто приказываешь кастануть в капитана первую абилку.
ответ
Ну только триггерные системы отрядов, была такая...
Вот пример ссылочка
Были и другие, поиск в помощь.
Вот еще ссылка
ответ
запомнить всех выбранных, затем очистить эту группу, добавить сначала твоего героя, а затем всех остальных
ответ
  • Выбираешь всех целевых юнитов в группу.
  • Создаёшь дамми.
  • Используя ForGroup и GetEnumUnit, применить на каждого юнита в группе заклинание.
  • Очищаешь групппу.
  • Удаляешь группу.
  • Удаляешь дамми.

У дамми-юнита должны стоять настройки анимации, позволяющие применять способности без задержек, у способности не должно быть кулдауна.

ответ
на каждый снаряд делаешь группу, в нее заносишь всех кто был поражен
done

23

» WarCraft 3 / Пара вопросов

Похожие вопросы:

ответ
Я не знаю, сработает ли это на практике, но теоретически - должно.
Нужно сделать первой главой в доп. кампании пустую карту, где будет только 2 действия - запуск ролика и сразу победа, без экрана статистики и диалогового окна. Как именно запускать ролик после победы - см. в обычных кампаниях. В RoC все 4 финальных ролика в кампаниях так запускаются при помощи этого действия.
А "пробел" между миссиями в доп. кампании, насколько я знаю, сделать невозможно. В обычных кампаниях за это отвечает файл UI\CampaignStrings.txt или UI\CampaignStrings_exp.txt. Если найдешь его аналог в файлах доп. кампании - попробуй изменить сроку со второй главой на:
Mission1=""
Совсем не факт, что там этот файл есть, и не факт, что этот способ будет работать - но попробовать можно. Тогда нужны будут 2 кнопки для 2й главы - "пробел" и "нормальная", которые нужно будет скрывать и открывать по мере прохождения.
ответ
  1. можно только модель героя, которая будет прикреплена в качестве спецэффекта к дамми юниту с особыми анимациями.
  2. Удалить и добавить снова, или юзнуть книгу забвения (учитывая что это руна это совсем изи) а затем приказать герою выучить все скиллы кроме нужного тебе, ну или как то иначе.
ответ
RikLine:
Sergarr:
Со вторым - можно легко уменьшить хп всех юнитов одной стороны с помощью функции Set Handicap из ГУИ.
Да, я понимаю, но другой вопрос: как "дать редактору понять", что один из игроков отсутствует? Какое событие или же условие надо поставить?
Можно просто считать количество играющих игроков. В ГУИ это делается так: создаешь целочисленную переменную и приравниваешь ее значение к Number of players in (All of players matching (((Matching player) slot status) равно Играет)).
Чтобы это дело прикрутить к установке гандикапа, ты создаешь триггер с кучей событий вида Игрок 1 (красный) leaves the game, туда вставляешь эту штуку выше, и затем там же устанавливаешь гандикап.
Да, и еще, эта функция считает всех компьютерных игроков тоже как "играющих", так что на это надо сделать поправку.

23

» WarCraft 3 / Активность

Похожие вопросы:

ответ
в чем вопрос?
ответ
идем читать статьи
ищем фразы - запретить заклинание, спелл бук, триггеры
ответ
Ну вылет у тебя на функции, которая занимается отрисовкой графики. Она универсальная, там и частицы обрабатываются, и поверхности. Так что ошибка явно в модели, а какой и как - хрен его знает
ответ
Steal nerves:
ссылка
не прерывается приказ почти у любой абилы без цели. В большинстве случаев, останавливаются, чтоб заюзать скилл. А потом продолжают делать те действия, которые оборвал. Типа Рев. Есть длительные касты, например: заговор неуязвимости, он остановится, попрыгает (channeling-анимация), и потом дальше будет идти. Или заклинание крови дракончика.
А вот тех, из-за чего еще и не останавливается на ходу, совсем мало
То есть если я поставлю в очередь приказы постройки, а в середине использую эти способности, то очередь прервётся?
можно проверить

23

» WarCraft 3 / Способность

Похожие вопросы:

ответ
Когда юнит проучивает пассивку, добавляй в группу юнита, который выучил пассивку. Дальше все просто -
Юнит умирает
Киллинг юнит в нашей группе - да
Дайинг юнит не в команде владельца киллинг юнит.
Игрок - адд проперти - 500 золото (овнер оф киллинг юнит)
ответ
скорее всего, он говорит о SetUnitMovespeed ()
ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь
ответ
На JASS-е есть функция GetLearnedSkill(), которая выдает rawcode выученного умения. Создаешь переменную типа "целочисленная" с названием SkillCode, потом в начале действий триггера пишешь через Custom Script что-то типо этого:
set udg_SkillCode=GetLearnedSkill()
и затем делаешь какие тебе там нужны сравнения на переменную SkillCode.
ответ
XGM Bot:
Похожие вопросы:

ответ
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.
ответ
ИИ чтоли не кастует? Сделай триггерный каст, Событие - юнит обнаружил цель в пределах досягаемости, проглотить не в кулдауне и цель неуязвимый враг, пойти и проглотить юнита...
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
ответ
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.


23

» WarCraft 3 / Я хз

Похожие вопросы:

ответ
так же смотри наработки на сайте/форуме
ответ
Stalker5500, как ты описал- должно работать.
Только сделай в событие либо только Нейтрально-враждебный умирает, либо Событие- боевая единица умирает, а в условие- Владелец умирающего - Нейтрально-враждебный.
А дальше в действиях есть такая конструкция в разделе Общие параметры if/then/else. Используй ее и будет тебе счастье
ответ
DoctorDoza, xgm.guru/p/wc3/jass_local_vars
я сегодня добрый так что пример напишу
void act(){ // эта функция - действие триггера
	unit attacker=GetAttacker(); // заносим атакующего в локалку
	unit attacked=GetTriggerUnit(); // заносим атакованного в локалку
	IssueTargetOrder( attacker, "thunderbolt",attacked); // приказываем атакующему кастануть молот бурь на атакованного
	TriggerSleepAction(0.5) // ждём 0.5 сек чтобы успел кастануть спел
	IssueTargetOrder( attacker, "attack",attacked); // приказываем атакующему атаковать атакованного 
}
ответ
Можно проще, через UnitPool. Правда у него нету GUI API.
"""
native CreateUnitPool takes nothing returns unitpool
native DestroyUnitPool takes unitpool whichPool returns nothing
native UnitPoolAddUnitType takes unitpool whichPool, integer unitId, real weight returns nothing
native UnitPoolRemoveUnitType takes unitpool whichPool, integer unitId returns nothing
native PlaceRandomUnit takes unitpool whichPool, player forWhichPlayer, real x, real y, real facing returns unit
"""

23

» WarCraft 3 / Хендл

Похожие вопросы:

ответ
В "key" есть функция "Load trigger Handle". Как ей воспользоваться, чтобы допустим получить хэндл начального и последнего триггера?
Так?
ответ
вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним
ответ
Проверил, да
ответ
Функции, исполняемые при тиках таймеров не должны принимать параметров. Для передачи данных нужно пользоватся хеш-таблицами.